﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Oracle.DataAccess.Client;
using BLL;

namespace QuanLyDatDai
{
    public partial class FrmThemThuaDat : Form
    { 

        public FrmThemThuaDat()
        {
            InitializeComponent();
        }

        #region Xử lý sự kiện trên form
        private void FrmThemThuaDat_Load(object sender, EventArgs e)
        {
            LoaiDatBLL loaidat = new LoaiDatBLL();
            cbbMaLoaiDat.DataSource = loaidat.DanhSachLoaiDat();
            ThuaDatBLL thuadat = new ThuaDatBLL();
            cbbPhanLoaiThua.DataSource = thuadat.DanhSachPhanLoaiThua();
            cbBoxThoiGianHinhThanh.DataSource = thuadat.DanhSachThoiGian();
            cbbMaToBanDo.DataSource = thuadat.DanhSachToBanDo();
            DanhSachThuaCanGop();            
        }

        private void DanhSachThuaCanGop()
        {
            if (listThuadatCanGop != null)
            {
                ListViewItem item;
                listViewThuaDatCanGop.Visible = true;

                for (int i = 0; i < listThuadatCanGop.Count; i++)
                {
                    item = listViewThuaDatCanGop.Items.Add(listThuadatCanGop[i].MATHUADAT.Trim());
                }
            }
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            DaGiacBLL dagiac = new DaGiacBLL();
            ThuaDatBLL thuadat = new ThuaDatBLL();
            if (ValidateForm())
            {
               if(dataGridViewNhapToaDo.Rows.Count>2){
                    dagiac.TaoDaGiac(txtMaDaGiac.Text, ToaDo(), txtMieuTa.Text);                    
                }
               else
                {
                    MessageBox.Show("Mời bạn nhập vô tọa độ! ", "Lỗi");
                    return;
                }
                try
                {                   
                    thuadat.ThemThuaDat(txtMaThuaDat.Text, txtMaDaGiac.Text, 
                    cbbPhanLoaiThua.SelectedValue.ToString(),cbbMaToBanDo.SelectedValue.ToString(),
                    cbbMaLoaiDat.SelectedValue.ToString(),cbBoxThoiGianHinhThanh.SelectedValue.ToString(),
                    "TG4",txtDiaChi.Text,txtNhaO.Text,txtCongTrinhKhac.Text,txtThoiHan.Text,
                    txtRungSanXuat.Text,txtCayLauNam.Text,txtGhiChu.Text);
                    

                    MessageBox.Show("Thêm thửa đất thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);                    
                }
                catch (Exception ex)
                {
                    dagiac.DeleteDaGiac(txtMaDaGiac.Text);
                    MessageBox.Show(ex.InnerException.Message, "Lỗi");                    
                }
            }
            else
            {
                MessageBox.Show("Mời nhập dữ liệu phù hợp","Thông báo");
            }
        }       
               
        //private void btnTaoToaDo_Click(object sender, EventArgs e)
        //{
        //    XoaControl();           
        //    //TaoToaDo();
        //}

        private void btnThemThoiGian_Click(object sender, EventArgs e)
        {
            groupBox2.Enabled = true;
        }

        private void btnLuuThoiGian_Click(object sender, EventArgs e)
        {
            ThuaDatBLL thuadat = new ThuaDatBLL();
            try
            {
                thuadat.ThemThoiGian(txtMaThoiGian.Text, dateTimePickerTaoThoiGian.Value.Date);
                MessageBox.Show("Lưu thời gian thành công", "thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch
            {
                MessageBox.Show("Chưa nhập mã thời gian", "Thông báo");
            }
            cbBoxThoiGianHinhThanh.DataSource = thuadat.DanhSachThoiGian();
            groupBox2.Enabled = false;
        }

        private decimal[] ToaDo()
        {
            List<decimal> a = new List<decimal>();
            int count = dataGridViewNhapToaDo.Rows.Count;
            for (int i = 0; i < dataGridViewNhapToaDo.Rows.Count; i++)
            {
                a.Add(Convert.ToDecimal(dataGridViewNhapToaDo.Rows[i].Cells[0].Value));
                a.Add(Convert.ToDecimal(dataGridViewNhapToaDo.Rows[i].Cells[1].Value));
            }
            a[count * 2 - 2] = a[0];
            a[count * 2 - 1] = a[1];
            return a.ToArray();
        }
        
                #endregion        

        #region code xử lý control

        //private void XoaControl()
        //{
        //    for (int i = 0; i < labelToaDoX.Count; i++)
        //    {
        //        groupBox3.Controls.Remove(labelToaDoX[i]);
        //        groupBox3.Controls.Remove(labelToaDoY[i]);
        //        groupBox3.Controls.Remove(textBoxToaDoX[i]);
        //        groupBox3.Controls.Remove(textBoxToaDoY[i]);

        //    }
        //    labelToaDoX.Clear();
        //    labelToaDoY.Clear();
        //    textBoxToaDoX.Clear();
        //    textBoxToaDoY.Clear();
        //}
        //private void TaoToaDo()
        //{
        //    if (ValidatetxtSoDinh())
        //    {
        //        int soToaDo = Int32.Parse(txtSoDinh.Text);


        //        for (int i = 0; i < soToaDo; i++)
        //        {
        //            Label labelX = new Label();
        //            labelX.Text = "Tọa độ X" + (i + 1) + ":";
        //            labelX.Width = 65;
        //            labelX.Left = 5;
        //            labelX.Top = (i + 5) * 25;
        //            labelToaDoX.Add(labelX);
        //            groupBox3.Controls.Add(labelX);

        //            TextBox textBoxX = new TextBox();
        //            textBoxX.Width = 70;
        //            textBoxX.Left = 70;
        //            textBoxX.Top = (i + 5) * 25;
        //            textBoxToaDoX.Add(textBoxX);
        //            groupBox3.Controls.Add(textBoxX);

        //            Label labelY = new Label();
        //            labelY.Text = "Tọa độ Y" + (i + 1) + ":";
        //            labelY.Width = 65;
        //            labelY.Left = 148;
        //            labelY.Top = (i + 5) * 25;
        //            labelToaDoY.Add(labelY);
        //            groupBox3.Controls.Add(labelY);

        //            TextBox textBoxY = new TextBox();
        //            textBoxY.Width = 70;
        //            textBoxY.Left = 210;
        //            textBoxY.Top = (i + 5) * 25;
        //            textBoxToaDoY.Add(textBoxY);
        //            groupBox3.Controls.Add(textBoxY);
        //        }
        //    }
        //}
        //private string ChuoiToaDo()
        //{
        //    string[] toaDoThuaDat = new string[labelToaDoX.Count * 2+2];
        //    int indexX = 0;
        //    int indexY = 0;
        //    string a = "";
        //    for (int i = 0; i < textBoxToaDoX.Count * 2; i++)
        //    {
        //        if (i % 2 == 0)
        //        {
        //            toaDoThuaDat[i] = textBoxToaDoX[indexX].Text;
        //            indexX++;
        //        }
        //        else
        //        {
        //            toaDoThuaDat[i] = textBoxToaDoY[indexY].Text;
        //            indexY++;
        //        }
        //    }
        //    toaDoThuaDat[labelToaDoX.Count * 2 ] = toaDoThuaDat[0];
        //    toaDoThuaDat[labelToaDoX.Count * 2 + 1] = toaDoThuaDat[1];
        //    for (int i = 0; i < (textBoxToaDoX.Count * 2 + 2); i++)
        //    {
        //        if (i != textBoxToaDoX.Count * 2 + 1)
        //            a += toaDoThuaDat[i] + ",";
        //        else
        //            a += toaDoThuaDat[i];
        //    }

        //    return a;
        //}
       
        
        //private decimal[] MangToaDo()
        //{
        //    decimal[] toaDoThuaDat = new decimal[labelToaDoX.Count * 2];
        //    int indexX = 0;
        //    int indexY = 0;
        //    for (int i = 0; i < textBoxToaDoX.Count * 2; i++)
        //    {
        //        if (i % 2 == 0)
        //        {
        //            toaDoThuaDat[i] = Decimal.Parse(textBoxToaDoX[indexX].Text);
        //            indexX++;
        //        }
        //        else
        //        {
        //            toaDoThuaDat[i] = Decimal.Parse(textBoxToaDoY[indexY].Text);
        //            indexY++;
        //        }
        //    }

        //    return toaDoThuaDat;
        //}

        private string ChuoiToaDo1()
        {
            string[] a = new string[100];
            int hang = 0;
            int hang1 = 1;
            string toado = "";
            int count = dataGridViewNhapToaDo.Rows.Count;
            foreach (DataGridViewRow row in dataGridViewNhapToaDo.Rows)
            {
                a[hang] = (string)row.Cells[0].Value;
                a[hang1] = (string)row.Cells[1].Value;
                hang += 2;
                hang1 += 2;
            }
            a[count * 2 - 2] = a[0];
            a[count * 2 - 1] = a[1];
            for (int i = 0; i < count * 2; i++)
            {
                if (i != count * 2 - 1)
                    toado += a[i] + ",";
                else
                    toado += a[i];
            }
            return toado;
        }       

#endregion

        #region Validate dữ liệu nhập
        private void dataGridViewNhapToaDo_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            dataGridViewNhapToaDo.Rows[e.RowIndex].ErrorText = "";
            float newFloat;

            // Don't try to validate the 'new row' until finished 
            // editing since there
            // is not any point in validating its initial value.
            if (dataGridViewNhapToaDo.Rows[e.RowIndex].IsNewRow) { return; }
            if (!float.TryParse(e.FormattedValue.ToString(),
                out newFloat))//|| newInteger < 0)
            {
                e.Cancel = true;
                dataGridViewNhapToaDo.Rows[e.RowIndex].ErrorText = "Giá trị nhập vô phải là một số";
            }
        }


        private bool ValidateForm()
        {
            bool bMaThuaDat=ValidatetxtMaThuaDat();
            bool bMaDaGiac = ValidatetxtMaDaGiac();
          // bool bSoDinh = ValidatetxtSoDinh();
            bool bMaThoiGian = ValidatetxtMaThoiGian();
            bool bDiaChi = ValidatetxtDiaChi();
            bool bNhaO = ValidatetxtNhaO();
            bool bCongTrinhKhac = ValidatetxtCongTrinhKhac();

            if (bMaThuaDat == false || bMaDaGiac == false ||bDiaChi==false||bNhaO==false||bCongTrinhKhac==false)
                return false;
            else
                return true;
        }
        
        private bool ValidatetxtMaThuaDat()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtMaThuaDat.Text))
            {
                errorProviderThemThuaDat.SetError(txtMaThuaDat, "Mời bạn nhập Mã thửa đất");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtMaThuaDat, "");
            return bStatus;
        }
        private bool ValidatetxtMaDaGiac()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtMaDaGiac.Text))
            {
                errorProviderThemThuaDat.SetError(txtMaDaGiac, "Mời bạn nhập mã đa giác");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtMaDaGiac, "");
            return bStatus;
        }
        //private bool ValidatetxtSoDinh()
        //{
        //    bool bStatus = true;
        //    if (string.IsNullOrEmpty(txtSoDinh.Text))
        //    {
        //        errorProviderThemThuaDat.SetError(txtSoDinh, "Mời bạn nhập số đỉnh");
        //        bStatus = false;
        //    }
        //    else
        //        errorProviderThemThuaDat.SetError(txtSoDinh, "");
        //    return bStatus;
        //}
        private bool ValidatetxtMaThoiGian ()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtMaThoiGian.Text))
            {
                errorProviderThemThuaDat.SetError(txtMaThoiGian, "Mời bạn nhập mã thời gian");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtMaThoiGian, "");
            return bStatus;
        }
        private bool ValidatetxtDiaChi()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtDiaChi.Text))
            {
                errorProviderThemThuaDat.SetError(txtDiaChi, "Mời bạn nhập địa chỉ");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtDiaChi, "");
            return bStatus;
        }
        private bool ValidatetxtNhaO()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtNhaO.Text))
            {
                errorProviderThemThuaDat.SetError(txtNhaO, "Mời bạn nhập Nhà ở");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtNhaO, "");
            return bStatus;
        }
        private bool ValidatetxtCongTrinhKhac()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtCongTrinhKhac.Text))
            {
                errorProviderThemThuaDat.SetError(txtCongTrinhKhac, "Mời bạn nhập công trình khác");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtCongTrinhKhac, "");
            return bStatus;
        }
        private bool ValidatetxtThoiHan()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtThoiHan.Text))
            {
                errorProviderThemThuaDat.SetError(txtThoiHan, "Mời bạn nhập thời hạn");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtCongTrinhKhac, "");
            return bStatus;
        }

        private void txtMaThuaDat_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtMaThuaDat();
        }      

        private void txtMaDaGiac_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtMaDaGiac();
        }

        private void txtMaThoiGian_Validating(object sender, CancelEventArgs e)
        {
            if (groupBox2.Enabled == true)
            {
                ValidatetxtMaThoiGian();
            }
        }

        private void txtDiaChi_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtDiaChi();
        }

        private void txtNhaO_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtNhaO();
        }

        private void txtCongTrinhKhac_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtCongTrinhKhac();
        }

        private void txtThoiHan_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtThoiHan();
        }

        private void txtRungSanXuat_Validating(object sender, CancelEventArgs e)
        {
           
        }
        
        private void txtThoiHan_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
            {
                e.Handled = true;
            }

            // only allow one decimal point
            if (e.KeyChar == '.'
                && (sender as TextBox).Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
        }
        #endregion

        //public List<Label> labelToaDoX = new List<Label>();
        //public List<Label> labelToaDoY = new List<Label>();
        //public List<TextBox> textBoxToaDoX = new List<TextBox>();
        //public List<TextBox> textBoxToaDoY = new List<TextBox>();

        public List<TIMTHUADATTHEOCHUSUDUNG_Result> listThuadatCanGop { get; set; }
                  
    }
}
